[IA64] allow __assign_domain_page() to assign real MMIO page over _PAGE_IO.
authorIsaku Yamahata <yamahata@valinux.co.jp>
Fri, 24 Oct 2008 02:38:09 +0000 (11:38 +0900)
committerIsaku Yamahata <yamahata@valinux.co.jp>
Fri, 24 Oct 2008 02:38:09 +0000 (11:38 +0900)
When VTD is enabled on HVM domain,
P2M entry may change from _PAGE_IO to real MMIO page.

Signed-off-by: Anthony Xu <anthony.xu@intel.com>
xen/arch/ia64/xen/mm.c

index f6a4b7eb1d200830b2fb00be2d6d1bf7a43a7c94..9cf861f5eb47a26c217808189b4177623bc9ecd0 100644 (file)
@@ -917,11 +917,19 @@ __assign_domain_page(struct domain *d,
 
     old_pte = __pte(0);
     new_pte = pfn_pte(physaddr >> PAGE_SHIFT, __pgprot(prot));
+ again_hvm_page_io:
     ret_pte = ptep_cmpxchg_rel(&d->arch.mm, mpaddr, pte, old_pte, new_pte);
     if (pte_val(ret_pte) == pte_val(old_pte)) {
         smp_mb();
         return 0;
     }
+    /* in HVM guest, when VTD is enabled,
+     * P2M entry may change from _PAGE_IO type to real MMIO page 
+     */
+    if(VMX_DOMAIN(d->vcpu[0]) && (pte_val(ret_pte) & _PAGE_IO)) {
+        old_pte = ret_pte;
+        goto again_hvm_page_io;
+    }
 
     // dom0 tries to map real machine's I/O region, but failed.
     // It is very likely that dom0 doesn't boot correctly because